home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
201
/
201.xpi
/
components
/
debugService.js
< prev
next >
Wrap
Text File
|
2010-01-11
|
4KB
|
160 lines
/* You may find the license in the LICENSE file */
function include(uri) {
Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader)
.loadSubScript(uri);
}
include('chrome://dta/content/common/xpcom.jsm');
const FileStream = new Components.Constructor('@mozilla.org/network/file-output-stream;1', 'nsIFileOutputStream', 'init');
const ScriptError = new Components.Constructor('@mozilla.org/scripterror;1', 'nsIScriptError', 'init');
var DebugService = {
// nsIObserver
observe: function DS_observe(subject, topic, prefName) {
this._setEnabled(this._pb.getBoolPref('extensions.dta.logging'));
},
init: function DS_init() {
this._cs = Cc['@mozilla.org/consoleservice;1'].getService(Ci.nsIConsoleService);
this._pb = Cc['@mozilla.org/preferences-service;1'].getService(Ci.nsIPrefBranch2);
this._pb.addObserver('extensions.dta.logging', this, true);
this._setEnabled(this._pb.getBoolPref('extensions.dta.logging'));
this._file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsILocalFile);
this._file.append('dta_log.txt');
try {
if (this._file.fileSize > (200 * 1024)) {
this.remove();
}
}
catch(ex) {
// No-Op
}
delete this.init;
},
get file() {
return this._file;
},
get enabled() {
return this._enabled;
},
_setEnabled: function DS_setEnabled(nv) {
this._enabled = nv;
if (nv) {
this.logString = this.log = this._log;
}
else {
this.logString = this.log = this._logDisabled;
}
},
_formatTimeDate: function DS_formatTimeDate(value) {
return String(value).replace(/\b(\d)\b/g, "0$1");
},
_log: function DS__log(msg, exception) {
try {
if (!msg || (msg == "" && typeof(exception) != "object")) {
return;
}
if (!(msg instanceof String) && typeof(msg) != 'string') {
for (var i = 0; i < 10 && msg.wrappedJSObject; ++i) {
msg = msg.wrappedJSObject;
}
msg = msg.toSource();
}
let time = new Date();
let text = this._formatTimeDate(time.getHours())
+ ":" + this._formatTimeDate(time.getMinutes())
+ ":" + this._formatTimeDate(time.getSeconds())
+ ":" + time.getMilliseconds()
+ "\n";
if (msg != "") {
text += msg.replace(/\n/g, "\n\t") + " ";
}
if (exception) {
text += "\tError: " + exception;
}
text += "\r\n";
let stack = null;
let lineNumber = 0;
let fileName = null;
if (Components.stack) {
stack = Components.stack.caller.caller;
}
if (exception && exception.stack) {
lineNumber = exception.lineNumber;
fileName = exception.fileName;
let initialLine = "Frame :: " + fileName;
if (exception.location) {
initialLine += " :: " + exception.location;
}
else if (stack && stack.name) {
initialLine += " :: " + stack.name;
}
initialLine += " :: line: " + lineNumber;
text += "\t> " + initialLine + "\n";
}
else if (stack) {
text += "\t> " + stack.toString() + "\n";
lineNumber = stack.lineNumber;
fileName = stack.fileName;
}
if (stack) {
let s = stack.caller;
for (let i = 0; i < 4 && s; ++i) {
text += "\t> " + s.toString() + "\n";
s = s.caller;
}
if (stack && exception) {
this._cs.logMessage(new ScriptError(text, fileName, null, lineNumber, 0, 0x2, 'component javascript'));
}
else {
this._cs.logStringMessage(text);
}
}
else {
this._cs.logStringMessage(text);
}
var f = new FileStream(this.file, 0x04 | 0x08 | 0x10, 0664, 0);
f.write(text, text.length);
f.close();
}
catch(ex) {
error(ex);
}
},
_logDisabled: function DS__dumpDisabled() {
// no-op;
},
log: this._log,
logString: this._log,
remove: function DS_remove() {
try {
this._file.remove(false);
}
catch (ex) {
throw Cr.NS_ERROR_FAILURE;
}
}
};
implementComponent(
DebugService,
Components.ID("{0B82FEBB-59A1-41d7-B31D-D5A686E11A69}"),
"@downthemall.net/debug-service;1",
"DownThemAll! Debug Service",
[Ci.nsIObserver, Ci.dtaIDebugService]
);
// entrypoint
function NSGetModule(compMgr, fileSpec) {
return new ServiceModule(DebugService, false);
}